package net.jcip.chapter3;

/**
 * Holder
 * <p/>
 * Class at risk of failure if not properly published
 *
 * 由于没有使用同步来确保Holder对象对其他线程可见，因此将Holder称为“未被正确发布;
 * 在未被正确发布的对象中存在两个问题。首先，除了发布对象的线程外，其他线程可以
 * 看到的Holder域是一个失效值，因此将看到一个空引用或者之前的旧值。
 * 然而，更糟糕的情况是，线程看到Holder引用的值是最新的，但Holder状态的值却是失效的。
 * 情况变得更加不可预测的是，某个线程在第一次读取域时得到失效值，而再次读取这个域时会得到一个更新值，
 * 这也是assertSainty抛出AssertionError的原因。
 *
 *
 * @author Brian Goetz and Tim Peierls
 */
public class Holder {

    private int n;

    public Holder(int n) {
        this.n = n;
    }

    public void assertSanity() {
        if (n != n){
            throw new AssertionError("This statement is false.");
        }
    }
}
